package com.company.ui;

import com.company.bean.User;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

// 自定义登陆界面 继承自JFrame
public class LoginFrame extends JFrame implements ActionListener { // 当前窗口对象也是事件监听器对象
    // 创建UI组件
    private JTextField loginNameField; // 用户名输入框
    private JPasswordField passwordField; // 密码输入框
    private JButton loginButton, registerButton; // 登录和注册按钮
    private static ArrayList<User> allUsers = new ArrayList<>(); // 创建静态用户集合存储所有用户的登录信息（实际开发中是存放在数据库中）
    // 现在需要提前存入一些用户数据到集合中，模拟登录
    // 使用静态代码块，提前存入用户数据
    static {
        allUsers.add(new User("管理员", "123456", "admin"));
        allUsers.add(new User("老板", "123456", "boss"));
    }
    public LoginFrame() {
        this.setTitle("员工信息管理系统 - 登录"); // 设置标题
        this.setSize(400, 300); // 设置大小
        this.setLocationRelativeTo(null); // 居中显示
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 调用设置面板的方法
        setupPanel();
    }

    // 设置面板的内容
    private void setupPanel() {

        // 创建面板用于承载输入框和按钮
        JPanel panel = new JPanel();
        panel.setLayout(null);
        panel.setBackground(new Color(235, 235, 235)); // 设置背景颜色
        this.add(panel);

        // 创建用户名标签和输入框
        JLabel usernameLabel = new JLabel("用户名:");
        usernameLabel.setBounds(50, 50, 80, 30); // 设置标签的位置和大小
        loginNameField = new JTextField();
        loginNameField.setBounds(140, 50, 150, 30); // 设置输入框的位置和大小

        // 创建密码标签和输入框
        JLabel passwordLabel = new JLabel("密码:");
        passwordLabel.setBounds(50, 100, 80, 30); // 设置标签的位置和大小
        passwordField = new JPasswordField();
        passwordField.setBounds(140, 100, 150, 30); // 设置输入框的位置和大小

        // 创建登录按钮和注册按钮
        loginButton = new JButton("登录");
        loginButton.setBounds(70, 180, 100, 40); // 设置按钮的位置和大小
        loginButton.setBackground(new Color(0, 123, 255)); // 设置按钮背景色
        loginButton.setForeground(Color.WHITE); // 设置按钮文字颜色
        loginButton.setFocusPainted(false); // 去掉焦点边框
        loginButton.setFont(new Font("楷体", Font.BOLD, 14)); // 设置按钮字体

        // 开发登录功能，为 登录按钮添加事件监听
        loginButton.addActionListener(this); // this 表示当前对象，即当前窗口对象，也是事件监听器对象

        registerButton = new JButton("注册");
        registerButton.setBounds(210, 180, 100, 40); // 设置按钮的位置和大小
        registerButton.setBackground(new Color(220, 53, 69));
        registerButton.setForeground(Color.WHITE);
        registerButton.setFocusPainted(false);
        registerButton.setFont(new Font("楷体", Font.BOLD, 14));

        // 将组件添加到面板
        panel.add(usernameLabel);
        panel.add(loginNameField);
        panel.add(passwordLabel);
        panel.add(passwordField);
        panel.add(loginButton);
        panel. add(registerButton);
    }

    @Override
    public void actionPerformed(ActionEvent e) { // e 表示事件对象，表示当前触发的事件
        JButton button = (JButton) e.getSource();
        if (button == loginButton) { // 如果用户点击的是登录按钮，则获取用户输入的登录名、密码信息，并对信息进行校验
            // 独立功能独立代码，将登录功能封装在方法中
            login();
        }
        else { // 如果用户点击的是注册按钮，则跳转到注册界面
            //new RegisterFrame();
            this.dispose();
        }
    }

    private void login() {
        String loginName = loginNameField.getText();
        String password = new String(passwordField.getPassword()); // 获取密码输入框中的密码，并转换为字符串类型  getPassword()返回字符数组
        for (User user : allUsers){ // 遍历用户集合，判断用户输入的登录名、密码是否正确
            if(user.getLoginName().equals(loginName)){
                if(user.getPassword().equals(password)){
                    // 弹出提示框，提示登录成功
                    JOptionPane.showMessageDialog(this, "登录成功", "成功提示", JOptionPane.INFORMATION_MESSAGE); // this表示当前窗口对象
                    // 跳转到员工管理界面
                    EmployeeManagementFrame employeeManagementFrame = new EmployeeManagementFrame();
                    employeeManagementFrame.setVisible(true);
                    this.dispose(); // 关闭当前窗口
                    break;
                }
                else{
                    // 弹出提示框，提示密码错误
                    JOptionPane.showMessageDialog(this, "密码错误", "错误提示", JOptionPane.ERROR_MESSAGE);
                }
            }
            else{
                // 弹出提示框，提示用户名错误
                JOptionPane.showMessageDialog(this, "用户名不正确", "错误提示", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
}

